package com.jn.erp.wechat.common.handler.cp;

import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.message.WxCpLinkedCorpMessage;
import me.chanjar.weixin.cp.bean.message.WxCpMessage;
import me.chanjar.weixin.cp.bean.message.WxCpMessageSendResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import java.util.Arrays;

/**
 * <pre>
 *  企业微信员工消息发送配置
 * </pre>
 *
 * @author sunjiyong
 * @since 2024/9/25 10:58
 */
@Component
public class CpMessageHandler {

    private final WxCpService wxCpService;

    @Autowired
    public CpMessageHandler(@Qualifier("wxCpSyncService") WxCpService wxCpService){
        this.wxCpService = wxCpService;
    }


    /**
     *  消息部门发送
     */
    public WxCpMessageSendResult TextMessageParty(String PartyID){
        //5
        try {
            WxCpMessage wxCpMessage = WxCpMessage
                    .TEXT()
                    .agentId( wxCpService.getWxCpConfigStorage().getAgentId()) // 企业号应用ID
                    /**
                     * 部门ID列表，最多支持100个。partyid在互联圈子内唯一。每个元素都是字符串类型，格式为：linked_id/party_id，其中linked_id是互联id，party_id是在互联圈子中的部门id。如果是本企业的部门，则直接传party_id即可。
                     */
                    .toParty(PartyID)//"非必填，PartyID列表，多个接受者用‘|’分隔。当touser为@all时忽略本参数"
                    .content("我是测试消息,只发给指定部门Party")
                    .build();
            WxCpMessageSendResult re=wxCpService.getMessageService().send(wxCpMessage);
            return re;
        } catch (WxErrorException e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

    /**
     *  消息指定员工发送
     * @param users sunjiyong|8 多条用|拼接
     */
    public WxCpMessageSendResult TextMessageUsers(String users){
        //sunjiyong
        try {
            WxCpMessage wxCpMessage = WxCpMessage
                    .TEXT()
                    .agentId( wxCpService.getWxCpConfigStorage().getAgentId()) // 企业号应用ID
//                    .toUser("sunjiyong|8")
                    .toUser(users)
                    .content("我是测试消息,只发给指定人员")
                    .build();
            WxCpMessageSendResult re=wxCpService.getMessageService().send(wxCpMessage);
            return re;
        } catch (WxErrorException e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

//    /**
//     *  消息完全发送@All(所有员工)
//     */
//    public WxCpMessageSendResult TextMessage(){
//        try {
//            WxCpMessage wxCpMessage = WxCpMessage
//                    .TEXT()
//                    .agentId( wxCpService.getWxCpConfigStorage().getAgentId()) // 企业号应用ID
////                    .toUser("非必填，UserID列表（消息接收者，多个接收者用‘|’分隔）。特殊情况：指定为@all，则向关注该企业应用的全部成员发送")
////                    .toParty("非必填，PartyID列表，多个接受者用‘|’分隔。当touser为@all时忽略本参数")
////                    .toTag("非必填，TagID列表，多个接受者用‘|’分隔。当touser为@all时忽略本参数")
//                    .toUser("@all")
//                    .content("我是测试消息,忽略我")
//                    .build();
//            WxCpMessageSendResult re=wxCpService.getMessageService().send(wxCpMessage);
//            return re;
//        } catch (WxErrorException e) {
//            System.out.println(e.getMessage());
//            return null;
//        }
//    }







    /**
     *  消息发送sendLinkedCorpMessage
     */
    public WxCpMessageSendResult SendLinkedCorpMessage(){
        try {
            WxCpLinkedCorpMessage.WxCpLinkedCorpMessageBuilder builder = WxCpLinkedCorpMessage.builder();
            builder.agentId(wxCpService.getWxCpConfigStorage().getAgentId());// 企业号应用ID
            builder.msgType("text");
            builder.content("测试下发送上下游消息");
            builder.isToAll(true);
            WxCpLinkedCorpMessage linkedCorpMessage= builder.build();
            WxCpMessageSendResult re = wxCpService.getMessageService().sendLinkedCorpMessage(linkedCorpMessage);
            wxCpService.getGroupRobotService().sendText("机器人发送的消息",null, Arrays.asList("15840142750","15040182713"));
            return re;
        } catch (WxErrorException e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

    /**
     *  消息发送sendLinkedCorpMessage
     */
    public WxCpMessageSendResult GroupRobotMessage(){
        try {
            wxCpService.getGroupRobotService().sendText("机器人发送的消息",null, Arrays.asList("15840142750","15040182713"));
            return null;
        } catch (WxErrorException e) {
            System.out.println(e.getMessage());
            return null;
        }
    }
}
